<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="../images/docs-stylesheet.css" rel="stylesheet" type="text/css"><title>Apache Tomcat 8 Configuration Reference (8.5.20) - The HTTP2 Upgrade Protocol</title><script type="application/javascript" data-comments-identifier="tomcat-8.5-doc/config/http2">
    "use strict"; // Enable strict mode

    (function() {
      var thisScript = document.currentScript;
      if (!thisScript) { // Workaround for IE <= 11
        var scripts = document.getElementsByTagName("script");
        thisScript = scripts[scripts.length - 1];
      }
      document.addEventListener("DOMContentLoaded", (function() {
        var commentsDiv = document.getElementById("comments_thread");
        var commentsShortname = "tomcat";
        var commentsIdentifier = "http://tomcat.apache.org/" +
          thisScript.getAttribute("data-comments-identifier") + ".html";

        (function(w, d) {
          if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
            var s = d.createElement("script");
            s.type = "application/javascript";
            s.async = true;
            s.src = "https://comments.apache.org/show_comments.lua?site=" +
              encodeURIComponent(commentsShortname) +
              "&page=" + encodeURIComponent(commentsIdentifier);
            d.head.appendChild(s);
          } else {
            commentsDiv.appendChild(d.createTextNode("Comments are disabled for this page at the moment."));
          }
        })(window, document);
      }), false);
    })();
  </script></head><body><div id="wrapper"><header><div id="header"><div><div><div class="logo noPrint"><a href="http://tomcat.apache.org/"><img alt="Tomcat Home" src="../images/tomcat.png"></a></div><div style="height: 1px;"></div><div class="asfLogo noPrint"><a href="http://www.apache.org/" target="_blank"><img src="../images/asf-logo.svg" alt="The Apache Software Foundation" style="width: 266px; height: 83px;"></a></div><h1>Apache Tomcat 8 Configuration Reference</h1><div class="versionInfo">
          Version 8.5.20,
          <time datetime="2017-08-02">Aug 2 2017</time></div><div style="height: 1px;"></div><div style="clear: left;"></div></div></div></div></header><div id="middle"><div><div id="mainLeft" class="noprint"><div><nav><div><h2>Links</h2><ul><li><a href="../index.html">Docs Home</a></li><li><a href="index.html">Config Ref. Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul></div><div><h2>Top Level Elements</h2><ul><li><a href="server.html">Server</a></li><li><a href="service.html">Service</a></li></ul></div><div><h2>Executors</h2><ul><li><a href="executor.html">Executor</a></li></ul></div><div><h2>Connectors</h2><ul><li><a href="http.html">HTTP/1.1</a></li><li><a href="http2.html">HTTP/2</a></li><li><a href="ajp.html">AJP</a></li></ul></div><div><h2>Containers</h2><ul><li><a href="context.html">Context</a></li><li><a href="engine.html">Engine</a></li><li><a href="host.html">Host</a></li><li><a href="cluster.html">Cluster</a></li></ul></div><div><h2>Nested Components</h2><ul><li><a href="cookie-processor.html">CookieProcessor</a></li><li><a href="credentialhandler.html">CredentialHandler</a></li><li><a href="globalresources.html">Global Resources</a></li><li><a href="jar-scanner.html">JarScanner</a></li><li><a href="jar-scan-filter.html">JarScanFilter</a></li><li><a href="listeners.html">Listeners</a></li><li><a href="loader.html">Loader</a></li><li><a href="manager.html">Manager</a></li><li><a href="realm.html">Realm</a></li><li><a href="resources.html">Resources</a></li><li><a href="sessionidgenerator.html">SessionIdGenerator</a></li><li><a href="valve.html">Valve</a></li></ul></div><div><h2>Cluster Elements</h2><ul><li><a href="cluster.html">Cluster</a></li><li><a href="cluster-manager.html">Manager</a></li><li><a href="cluster-channel.html">Channel</a></li><li><a href="cluster-membership.html">Channel/Membership</a></li><li><a href="cluster-sender.html">Channel/Sender</a></li><li><a href="cluster-receiver.html">Channel/Receiver</a></li><li><a href="cluster-interceptor.html">Channel/Interceptor</a></li><li><a href="cluster-valve.html">Valve</a></li><li><a href="cluster-deployer.html">Deployer</a></li><li><a href="cluster-listener.html">ClusterListener</a></li></ul></div><div><h2>web.xml</h2><ul><li><a href="filter.html">Filter</a></li></ul></div><div><h2>Other</h2><ul><li><a href="systemprops.html">System properties</a></li><li><a href="jaspic.html">JASPIC</a></li></ul></div></nav></div></div><div id="mainRight"><div id="content"><h2>The HTTP2 Upgrade Protocol</h2><h3 id="Table_of_Contents">Table of Contents</h3><div class="text">
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Attributes">Attributes</a><ol><li><a href="#Common_Attributes">Common Attributes</a></li><li><a href="#Standard_Implementation">Standard Implementation</a></li></ol></li><li><a href="#Nested_Components">Nested Components</a></li><li><a href="#Special_Features">Special Features</a></li></ul>
</div><h3 id="Introduction">Introduction</h3><div class="text">

  <p>The <strong>HTTP Upgrade Protocol</strong> element represents an
  <strong>Upgrade Protocol</strong> component that supports the HTTP/2 protocol.
  An instance of this component must be associated with an existing
  <a href="http.html">HTTP/1.1 Connector</a>.</p>

  <p>HTTP/2 connectors use non-blocking I/O, only utilising a container thread
  from the thread pool when there is data to read and write. However, because
  the Servlet API is fundamentally blocking, each HTTP/2 stream requires a
  dedicated container thread for the duration of that stream.</p>

</div><h3 id="Attributes">Attributes</h3><div class="text">

  <div class="subsection"><h4 id="Common_Attributes">Common Attributes</h4><div class="text">

  <p>All implementations of <strong>Upgrade Protocol</strong> support the
  following attributes:</p>

  <table class="defaultTable"><tr><th style="width: 15%;">
          Attribute
        </th><th style="width: 85%;">
          Description
        </th></tr><tr><td><strong><code class="attributeName">className</code></strong></td><td>
      <p>This must be <code>org.apache.coyote.http2.Http2Protocol</code>.</p>
    </td></tr></table>

  </div></div>

  <div class="subsection"><h4 id="Standard_Implementation">Standard Implementation</h4><div class="text">

  <p>The HTTP/2 <strong>Upgrade Protocol</strong> implementation supports the
  following attributes in addition to the common attributes listed above.</p>

  <table class="defaultTable"><tr><th style="width: 15%;">
          Attribute
        </th><th style="width: 85%;">
          Description
        </th></tr><tr><td><code class="attributeName">allowedTrailerHeaders</code></td><td>
      <p>By default Tomcat will ignore all trailer headers when processing
      HTTP/2 connections. For a header to be processed, it must be added to this
      comma-separated list of header names.</p>
    </td></tr><tr><td><code class="attributeName">initialWindowSize</code></td><td>
      <p>Controls the initial size of the flow control window for streams that
      Tomcat advertises to clients. If not specified, the default value of
      <code>65535</code> is used.</p>
    </td></tr><tr><td><code class="attributeName">keepAliveTimeout</code></td><td>
      <p>The time, in milliseconds, that Tomcat will wait between HTTP/2 frames
      before closing the connection. Negative values will be treated as an
      infinite timeout. If not specified, a default value of <code>-1</code>
      will be used.</p>
    </td></tr><tr><td><code class="attributeName">maxConcurrentStreamExecution</code></td><td>
      <p>The controls the maximum number of streams for any one connection that
      can be allocated threads from the container thread pool. If more streams
      are active than threads are available, those streams will have to wait
      for a stream to become available. If not specified, the default value of
      <code>200</code> will be used.</p>
    </td></tr><tr><td><code class="attributeName">maxConcurrentStreams</code></td><td>
      <p>The controls the maximum number of active streams permitted for any one
      connection. If a client attempts to open more active streams than this
      limit, the stream will be reset with a <code>STREAM_REFUSED</code> error.
      If not specified, the default value of <code>200</code> will be used.</p>
    </td></tr><tr><td><code class="attributeName">maxHeaderCount</code></td><td>
      <p>The maximum number of headers in a request that is allowed by the
      container. A request that contains more headers than the specified limit
      will be rejected. A value of less than 0 means no limit.
      If not specified, a default of 100 is used.</p>
    </td></tr><tr><td><code class="attributeName">maxHeaderSize</code></td><td>
      <p>The maximum total size for all headers in a request that is allowed by
      the container. Total size for a header is calculated as the uncompressed
      size of the header name in bytes, plus the uncompressed size of the header
      value in bytes plus an HTTP/2 overhead of 3 bytes per header. A request
      that contains a set of headers that requires more than the specified limit
      will be rejected. A value of less than 0 means no limit. If not specified,
      a default of 8192 is used.</p>
    </td></tr><tr><td><code class="attributeName">maxTrailerCount</code></td><td>
      <p>The maximum number of trailer headers in a request that is allowed by
      the container. A request that contains more trailer headers than the
      specified limit will be rejected. A value of less than 0 means no limit.
      If not specified, a default of 100 is used.</p>
    </td></tr><tr><td><code class="attributeName">maxTrailerSize</code></td><td>
      <p>The maximum total size for all trailer headers in a request that is
      allowed by the container. Total size for a header is calculated as the
      uncompressed size of the header name in bytes, plus the uncompressed size
      of the header value in bytes plus an HTTP/2 overhead of 3 bytes per
      header. A request that contains a set of trailer headers that requires
      more than the specified limit will be rejected. A value of less than 0
      means no limit. If not specified, a default of 8192 is used.</p>
    </td></tr><tr><td><code class="attributeName">readTimeout</code></td><td>
      <p>The time, in milliseconds, that Tomcat will wait for additional data
      when a partial HTTP/2 frame has been received. Negative values will be
      treated as an infinite timeout. If not specified, a default value of
      <code>10000</code> will be used.</p>
    </td></tr><tr><td><code class="attributeName">writeTimeout</code></td><td>
      <p>The time, in milliseconds, that Tomcat will wait to write additional
      data when an HTTP/2 frame has been partially written. Negative values will
      be treated as an infinite timeout. If not specified, a default value of
      <code>10000</code> will be used.</p>
    </td></tr></table>

  <p>The HTTP/2 upgrade protocol will also inherit the following limits from the
  <a href="http.html">HTTP Connector</a> it is nested with:</p>

  <ul>
    <li>maxCookieCount</li>
    <li>maxParameterCount</li>
    <li>maxPostSize</li>
    <li>maxSavePostSize</li>
  </ul>

  </div></div>

</div><h3 id="Nested_Components">Nested Components</h3><div class="text">

  <p>This component does not support any nested components.</p>

</div><h3 id="Special_Features">Special Features</h3><div class="text">

  <p>This component does not support any special features.</p>

</div><div class="noprint"><h3 id="comments_section">
                  Comments
                </h3><div class="text"><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
                    on improving documentation for Apache Tomcat.<br><br>
                    If you have trouble and need help, read
                    <a href="http://tomcat.apache.org/findhelp.html">Find Help</a> page
                    and ask your question on the tomcat-users
                    <a href="http://tomcat.apache.org/lists.html">mailing list</a>.
                    Do not ask such questions here. This is not a Q&amp;A section.<br><br>
                    The Apache Comments System is explained <a href="../comments.html">here</a>.
                    Comments may be removed by our moderators if they are either
                    implemented or considered invalid/off-topic.
                  </p><div id="comments_thread"></div></div></div></div></div></div></div><footer><div id="footer">
    Copyright &copy; 1999-2017, The Apache Software Foundation
  </div></footer></div></body></html>